package com.ybg.rbac.user.dao;

import java.util.List;
import org.springframework.social.connect.Connection;
import com.ybg.base.jdbc.BaseMap;
import com.ybg.base.util.Page;
import com.ybg.rbac.user.domain.UserDTO;
import com.ybg.rbac.user.qvo.UserQuery;

/***
 * @author https://gitee.com/YYDeament/88ybg
 * 
 * @date 2016/10/1
 */
public interface UserDao {

	/**
	 * 创建用户
	 * 
	 * @param user
	 * @return
	 * @throws Exception
	 */
	UserDTO save(UserDTO user) throws Exception;

	/**
	 * 更新数据，条件 和 需要更新的字段都不能为空 不限个数个条件
	 * 
	 * @author Deament
	 * @param updatemap
	 *            需要更新的字段和值
	 * @param wheremap
	 *            更新中的条件字段和值
	 * @param table_name
	 *            表的名称
	 **/
	void update(BaseMap<String, Object> updatemap, BaseMap<String, Object> wheremap);

	/**
	 * 分页查询
	 * 
	 * @param page
	 * @param qvo
	 * @return
	 * @throws Exception
	 */
	Page list(Page page, UserQuery qvo) throws Exception;

	/**
	 * 不分页查询
	 * 
	 * @param qvo
	 * @return
	 * @throws Exception
	 */
	List<UserDTO> list(UserQuery qvo) throws Exception;

	/**
	 * 登陆
	 * 
	 * @param loginname
	 * @return
	 */
	UserDTO login(String loginname);

	/**
	 * 根据条件删除
	 * 
	 * @param wheremap
	 */
	void remove(BaseMap<String, Object> wheremap);

	/**
	 * 清除注册不激活的用户
	 * 
	 * @throws Exception
	 **/
	void removeExpired() throws Exception;

	/**
	 * 查询账户是否已存在
	 * 
	 * @param qvo
	 * @return
	 */
	boolean checkisExist(UserQuery qvo);

	/**
	 * 根据ID登陆
	 * 
	 * @param userId
	 * @return
	 */
	UserDTO loginById(String userId);

	/**
	 * 找到用户的社交ID
	 * 
	 * @param connection
	 * @return
	 */
	public List<String> findUserIdsWithConnection(Connection<?> connection);

	/**
	 * 更新用户的角色依赖
	 * 
	 * @param userid
	 * @param roleids
	 */
	void updateUserRole(String userid, List<String> roleids);

	/**
	 * 根据ID 获取用户
	 * 
	 * @param id
	 * @return
	 */
	UserDTO getById(String id);

}
